# 通过装饰器 获取私有属性 设置私有属性
# 注意: 私有属性为money, 其函数名也必须是 def money(self) / def money(self, money)

# 定义person类 设置私有属性 在类外部不能被直接使用
class Person(object):
    def __init__(self):
        self.__money = 2000

    def get_money(self):
        return self.__money

    def set_money(self, money):
        self.__money = money

    # 通过装饰器 获取私有属性 设置私有属性
    @property  # 相当于把get方法当做属性方式来用 (p1.money 放在等号右边)
    def money(self):
        return self.__money

    @money.setter  # 相当于把set方法当做属性方式来用 (p1.money 放在=号的左边)
    def money(self, money):
        if money < 100:
            print('money数值太小 设置不成功')
            return
        self.__money = money


def dm01_通过公共接口获取money():
    # 1 实例化人对象
    p1 = Person()

    # 2 获取私有属性 - 通过公共接口
    # print(1,p1.__money)  # AttributeError: 'Person' object has no attribute '__money'
    print(2, p1.get_money())

    # 3 设置私有属性 - 通过公共接口
    p1.set_money(5000)
    print(3, p1.get_money())


def dm02_通过装饰器获取money():
    # 1 实例化人对象
    p1 = Person()
    print(4, p1.money)

    p1.money = 101
    print(5, p1.money)
    pass


if __name__ == '__main__':
    print('----------dm01_通过公共接口获取money---------------------')
    dm01_通过公共接口获取money()
    print('----------dm02_通过装饰器获取money---------------------')
    dm02_通过装饰器获取money()
    pass
